package com.tedu.api.list;

import org.junit.Test;

import java.awt.*;
import java.util.ArrayList;
import java.util.Collection;

/**
 * Collection
 * 存放相同的数据----数组
 * 数组的定义:int[] i=new int[10];   定长
 * 需求：存898个元素[]不限制任意类型【基本数据类型  引用类型】
 * 利用集合准备上述问题
 * 集合:存不确定的元素数   存任意类型【限定类型】【重点】
 * 包位置:java.util
 * Collection顶级容器   接口
 * 作用:集合中提供了所有容器的通用方法  维护元素  操作元素
 * <p>
 * Collection  顶级容器---创建对象  两个常用的子接口：
 * list集合 : 可重复的集合并且有序
 * List 子接口下：ArrayLis  数组集合
 * Set集合【接口】:  不可能重复集合【存储特点】
 * <p>
 * 创建顶级的集合对象:采用多态----接口----  引用=new   子接口下的实现类
 */
public class CollectionAPI {
    /**
     * Collection 对象方法
     * add()方法  返回值 :boolean
     * 语法:add(任何类型元素)
     * 作用:向当前集合中添加给定元素   可以为任何类型
     * 如果元素存入成功  返回true   元素存入失败  返回false
     * <p>
     * size()方法    返回值:int
     * 作用：返回集合的个数----【数组length:返回数组长度】
     * isEmpty()方法   返回值:boolean
     * 作用：判断元素是否为空 返回集合元素有值【不是空】   返回值false
     * 没有值【是空的】  返回值true
     * clear()方法    返回值:void
     * 作用:清空集合的元素
     */
    @Test
    public void testCollection() {
        //创建顶级集合容器:不定长  无限存【集合尽量存相同数据】
        Collection c = new ArrayList();
        c.add("one");
        c.add("2");
        c.add(new Frame());
        c.add(true);
        c.add('1');
        c.add(1.2);
        System.out.println("打印容器【顶级集合】:" + c);
        System.out.println("打印集合个数" + c.size());
        //   c.clear();  //清空元素
        boolean b = c.isEmpty();
        System.out.println("集合中是否存在元素:" + b);
    }

    /**
     * remove()   返回值:boolean
     * 引用:从集合中删除给定元素  如果删除元素重复  只删除匹配第一元素数据
     * 底层:使用equals方法判断删除元素
     */
    @Test
    public void testRemove() {
        Collection c = new ArrayList();
        c.add("2");
        c.add("3");
        c.add("d");
        c.add("3");
        c.add("4");
        c.add("5");
        System.out.println("集合元素:" + c);
        c.remove("3");
        System.out.println("删除集合元素:" + c);
    }

    /**
     * addAll（Collection  c）方法   返回值：boolean
     * 作用：将给定集合中所有的元素添加到另外一个集合中  当添加完毕后
     * 返回值true
     */
    @Test
    public void testAll() {
        //创建第一个集合
        Collection c1 = new ArrayList<>();
        c1.add("web");
        c1.add("java");
        c1.add("c");
        //创建第二个集合
        Collection c2 = new ArrayList();
        c2.add("go");
        c2.add("php");
        c2.add("net");
        //并集  c2集合元素添加到c1集合元素中
        boolean b = c1.addAll(c2);
        System.out.println("并集是否成功:" + b);
        System.out.println("并集结果是:" + c1);
    }

    /**
     * containsAll（）    返回值：boolean
     * 作用：判断当前集合是否包含给个集合当中的所有元素
     * 判断:两个集合所有的元素是否一致
     */
    @Test
    public void testContainAll() {
        Collection c1 = new ArrayList();
        c1.add("go");
        c1.add("java");
        Collection c2 = new ArrayList();
        c2.add("java");
        c2.add("go");
        //判断  c1集合是否包含c2集合【集合存入元素顺序不一致】
        boolean b = c1.containsAll(c2);
        System.out.println("c1集合是否包含c2集合元素:" + b);
    }

    /**
     * removeAll   返回值 boolean
     * 作用：删除当前集合中与给定集合中共有元素【交集】
     */
    @Test
    public void testRemoveAll() {
        Collection c1 = new ArrayList();
        c1.add("1");
        c1.add("2");
        c1.add("3");
        Collection c2 = new ArrayList();
        c2.add("1");
        c2.add("2");
        c2.add("7000000000000000000000000000000000000000000000000000000000000000000000");
        boolean b = c1.removeAll(c2);
        System.out.println("交集是否成功:" + b); //true
        System.out.println("交集集合结果:" + c1);//[3]
    }


}
